package common

import (
	"github.com/golang/protobuf/proto"
)

type CloseType int

var (
	CloseType_UpLayer    CloseType = 0 //上层主动
	CloseType_UnderLayer CloseType = 1 //下层被动
)

type SessionInfo struct {
	Client      ISession //玩家链接
	Login       ISession //登陆链接
	Game        ISession //游戏链接
	SessionType int      //会话类型
	IsAuth      bool     //是否为登陆服务器授权过的连接
	UserID      int32    //用户标识
	SpreaderID  uint32   //渠道ID
	MachineID   string   //渠道ID
}

type ISession interface {
	//会话绑定数据操作
	BindSessionData(interface{})
	GetSessionData() interface{}
	GetSessionInfo() *SessionInfo
	GetSessionString() string

	// 发包
	Send(uint16, uint16, []byte) error
	// 发送pb消息
	SendPbMessage(mainId uint16, subId uint16, pb proto.Message) error
	// 发送gob消息
	SendGobMessage(mainId uint16, subId uint16, e interface{}) error

	// 收包，为了机器人
	Recv(uint16, uint16, []byte) bool
	// 断开
	Close(CloseType)
	IsClosed() bool

	// 标示ID
	ID() uint64
	//设置用户数据
	SetBindData(interface{})
	//获取到用户数据
	GetBindData() interface{}
	//获取ip地址
	GetRemoteAddr() string
}
